package com.qgs.secsgem.mq.consumer.commonHandler;

import com.qgs.secsgem.common.utils.CommonFunction;
import com.qgs.secsgem.mq.entity.MQMessage;
import com.qgs.secsgem.mq.entity.specificBody.QueryEQStatusBody;
import com.qgs.secsgem.mq.producer.component.RabbitSender;
import com.qgs.secsgem.mq.secsgem.SendedList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;

/**
 * @Desc: ""
 * @Author: caixiang
 * @DATE: 2021/8/25 15:17
 */
@Component
public class MQMessageHandler {

    @Autowired
    RabbitSender rabbitSender;

    private static final Logger logger = LoggerFactory.getLogger(MQMessageHandler.class);

    /**
     * 执行 queryEquipmentStatus 业务逻辑
     * @param mqMessage
     * @return 结果依据requestHandler return来
     */
    public Integer queryEquipmentStatus(MQMessage mqMessage){
        QueryEQStatusBody queryEqStatusBody = (QueryEQStatusBody)CommonFunction.parseBody(mqMessage.getBody(), QueryEQStatusBody.class);
        //开始
        //这里写 业务逻辑

        //结束
        System.out.println(queryEqStatusBody.toString());

        return 1;
    }

    public static void main(String[] args) {
        String s = "";
    }

    /**
     * reply消息 处理方法
     * @param message
     * @return
     */
    public Integer responseHandler(Message<?> message){
        MQMessage mqMessage = CommonFunction.parse(message);
        String transactionId = mqMessage.getHeader().getTransactionId();
        SendedList.set(transactionId,mqMessage);

        return 1;
    }

    /**
     * 业务处理方法
     * @param message
     * @return
     *          1 = 代表成功 （外部可以 正常签收message （basicAck））
     *          2 = 代表业务处理异常 （外部 拒收 （basicNack））
     *          3 = 代表业务处理失败 （可以选择 签收 也可以拒收 依据自己业务决定 ）
     */
    public Integer requestHandler(Message<?> message){

        MQMessage mqMessage = CommonFunction.parse(message);
        String messageName = mqMessage.getHeader().getMessageName();
        Integer result = -1;
        //业务逻辑
        switch (messageName) {
            case "QUERYEQPStatus":
                result = queryEquipmentStatus(mqMessage);
                break;
            case "b": //b分支
                System.out.println("匹配成功2");
                break;
            case "c": //c分支
                System.out.println("匹配成功3");
                break;
            case "d": //d分支
                System.out.println("匹配成功4");
                break;
            default:
                break;
        }

        return result;
    }


}
